
--- # physics 物理BUFF 物理buff 无法被净化 无法被无敌取消 无视韧性减免 
--- # debuff  负面BUFF 负面buff 可以被无敌取消 , 非 负面buff 可以被净化 
--- # control 控制BUFF 负面buff + 控制buff 可以被韧性减免 

ac.game:on '单位-即将获得状态' (function(_,unit,buff)
	local source = buff.source 
	-- 负面buff 则开始判定 
	if buff:is_debuff() then
		-- 无敌抵消负面buff 物理BUFF 不受影响 
		if not buff:is_physics() and unit:has_restriction '无敌' then 
			return false
		end 
		--如果是控制buff
		if buff:is_control() then
			
			if unit:has_restriction '免控' or unit:get('控制减免') >= 100 then
				unit:notify("单位-免疫控制效果", unit, buff)
				return false 
			end

			-- 时间大于 0 
			if buff.time > 0 then 
				
				-- 击飞 击退 不吃 韧性 减免 但韧性达到 100 则可以无视击飞 击退
				if not buff:is_displace() then  
					-- buff.time = buff.time * (1 + source:get('控制效果') * 0.01)
					buff.time = buff.time * (100 - unit:get('控制减免')) / 100
				end
				if unit:dispatch("单位-即将获得控制状态", unit, buff) == false then 
					return false 
				end 
				-- 能打断引导
				if buff:is_disrupt() then 
					-- 删除引导buff 
					for bf in unit:search_buffs() do 
						if bf:is_channel() and bf.channel == 1 then 
							bf:remove()
						end 
					end 
				end
			end
		end
	end
end)

ac.game:event '单位-受到伤害开始' (function(_,unit,source,damage)
    local buff = damage.buff 
    if buff then
		if buff.debuff and not buff.control then 
			damage:mul(source:get('异常伤害') * 0.01 + 1)
		end 
    end 
end)
